#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
constexpr int N = 2007;
int a[N], c[N], dp[N], n;
int main() {
  // freopen("neuvillette.in","r",stdin);
  // freopen("neuvillette.out","w",stdout);
  cin >> n;
  n--;
  for (int i = 1; i <= n; i++)
    cin >> c[i];
  for (int i = 1; i <= n; i++)
    cin >> a[i];
  memset(dp, 0x3f, sizeof dp);
  int i;
  for (i = n; i >= 0; i--) {
    dp[i] = 0;
    if (a[i] != 0)
      break;
  }
  i++; // 从后往前找到第一有豌豆的位置
  for (; i >= 1; i--) {
    for (int j = i - 1; j >= max(0, i - c[i]); j--) {
      dp[j] = min(dp[j], dp[i] + 1);
      if (a[j]) // 如果有豌豆，不妨都放到这里。集中这里一起转移
        break;  // 防止这个碗的豆子没有转移出去
    }
  }

  // 注意：在第 j 个碗原本就有豆子的情况下，如果在找到第 j
  // 个碗后再往前找最小值，那么有可能第 j
  // 个碗的豆子就不会被转移出去（后面的豆子可以绕过第 j
  // 个碗转移到前面去），所以在枚举 j 时若 a[j] = 0 就要退出循环（即代码中的 if
  // (a[i] != 0) break;

  // for(int i=0;i<=n;i++) cerr<<dp[i]<<' ';
  cout << dp[0];
  return 0;
}